package es.duma.util.config;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;

/**
 */
public class Configurator {

   /** 
    * Nombre del fichero de configuracion por defecto para el sistema DUMA
    **/
    private static final String FILE_CONFIGURATOR="configurator.properties";

    /**
     * Tabla hash donde se almacenan los valores de las propiedades cargadas para ser accedidas
     * desde otras partes de la aplicacion.
     */
    private static Hashtable properties=null;
    
    /**
     * Nombre o identificador para mostrar en los mensajes de log producidos por esta clase
     */
    private static final String LOG_ID="[Configurator_DUMA]";


    /**
     * Devuelve el valor de la propiedad con el nombre solicitado en el parametro propertie.
     * Si el fichero .properties no ha sido cargado aun o el parametro force es true, los valores 
     * del fichero se cargan en el atributo properties de la clase.
     * @param force si toma valor true el fichero .properties vuelve a ser recargado
     * @param propertie nombre de la propiedad para obtener su valor
     * @return valor de la propiedad. [null si no se ha podido obtener]
     */
    public static String getPropertieValue(boolean force, String propertie){
        if (force)
            init();
        if (properties.containsKey(propertie)){
            return (String)properties.get(propertie);
        }
        return null;
      
    }


    /**
     * @param propertie nombre de la propiedad para obtener su valor
     * @return valor de la propiedad. [null si no se ha podido obtener]
     */
    public static String getPropertieValue(String propertie){
        if (properties!=null)
            return getPropertieValue(false,propertie);
        else
            return getPropertieValue(true,propertie);
    }

    /**
     * Se recarga el fichero de configuración
     */
    public static void init(){
        System.out.println(LOG_ID+" Cargando configuracion del sistema del fichero de propiedades "+FILE_CONFIGURATOR);
        Properties prop = new Properties();
        InputStream is = null;
        // Se crea la tabla hash donde almacenar las propiedades obtenidas
        properties=new Hashtable();
        
        prop=ConfigurationLoader.loadProperties(FILE_CONFIGURATOR);
        
       
        for (Enumeration e = prop.keys(); e.hasMoreElements() ; ) {
            // Obtenemos el objeto
            Object obj = e.nextElement();
            System.out.println("Se carga la propiedad: "+ obj + ": " + prop.getProperty(obj.toString()));
            properties.put(obj.toString(), prop.getProperty(obj.toString()));
        }
        
        System.out.println(LOG_ID+" Se ha cargado la configuracion del fichero de porpiedades con exito");
    }

   
  

  
}
